package rabc.veiw;

import rabc.domain.dto.RoleDto;
import rabc.domain.vo.RoleVo;
import rabc.domain.vo.Result;
import rabc.service.Roleservice;

public class  RoleVeiw {
    public static RoleVo[] cache;

    public static  void show() {
        String menuChoice;
        do {
            printMenu();
            menuChoice = MainVeiw.input.nextLine();
            switch (menuChoice) {
                case "0":
                    MainVeiw.show();
                    break;
                case "1":
                    list();
                    break;
                case "2":
                    create();
                    break;
                case "3":
                    update();
                    break;
                case "4":
                    delete();
                    break;
                default:
                    System.out.println("非法输入");
            }
        }while(!"0".equals(menuChoice));
        MainVeiw.input.close();
    }
    public static void  printMenu(){

        String Menu= """
                -------------------
                    角色管理
                -------------------
                | 0 返回上级        |
                | 1 角色列表        |
                | 2 创建角色        |
                | 3 更新角色        |
                | 4 删除角色        |
                -------------------
                请输入选项：
                """;
        System.out.println(Menu);
    }
    public static void printError(String message){
        System.out.println("\033[31m"+message+"\033[0m"  );
    }
    public static void list(){
        Result result = Roleservice.list();
        cache=(RoleVo[]) result.data;
        System.out.println("角色编号\t角色名称\t角色数据访问范围");
        for (RoleVo roleVo : cache) {
            System.out.printf("%d\t%s\t%s\n", roleVo.id, roleVo.name, roleVo.dataScope);
        }
    }
    public static void create(){
        System.out.println("请输入角色名称：");
        String name = MainVeiw.input.nextLine();
        System.out.println("请输入角色数据访问范围：输入的值应该为[个人，部门，全局]其中一个");
        String dataScope = null;
        do{
            String str = MainVeiw.input.nextLine();
            if ("个人".equals(str) || "部门".equals(str) || "全局".equals(str)) {
                dataScope = str;
            } else {
                System.out.println("输入的值不合法，输入的值应该为[个人，部门，全局]其中一个");
            }
        }while(dataScope==null);
        RoleDto dto = new RoleDto(name,dataScope);
        Result result = Roleservice.create(dto);
        if(!result.success){
            printError(result.message);
            return;
        }else{
            System.out.println(result.message);
            list();
        }
    }
    public static void update(){
        RoleVo role = getCacheBy();
        if (role==null){
            return;
        }
        System.out.print("请输入角色名称：直接回车表示不修改");
        String name = MainVeiw.input.nextLine();
        name="".equals(name)?role.name:name;
        System.out.print("请输入角色数据访问范围：输入的值应该为[个人，部门，全局]其中一个,直接回车表示不修改");
        String dataScope = null;
        do{
            String str = MainVeiw.input.nextLine();
            if ("个人".equals(str) || "部门".equals(str) || "全局".equals(str)) {
                dataScope = str;
            } else if ("".equals(str)) {
                dataScope = role.dataScope;
            }
            else {
                System.out.println("输入的值不合法，输入的值应该为[个人，部门，全局]其中一个");
            }
        }while(dataScope==null);
        RoleDto dto = new RoleDto(name,dataScope);
        Result result = Roleservice.update(dto,role.id);
        if(!result.success){
            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();
    }
    public static void delete(){
        RoleVo role = getCacheBy();
        if (role==null){
            return;
        }
        System.out.println("确认删除吗？y确认，其他取消/n");
        String confirm = MainVeiw.input.nextLine();

        if ("y".equalsIgnoreCase(confirm)) {
            System.out.println("已删除");
            return;
        }
        Result result = Roleservice.delete(role.id);
        if(!result.success){
            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();

    }
    public static RoleVo getCacheBy (){
        System.out.println("请输入id编号：id必须是大于零的整数");
        if (!MainVeiw.input.hasNextInt()){
            MainVeiw.input.nextLine();
            System.out.println("id必须是整数，请输入整数");
            return null;
        }
        int id = MainVeiw.input.nextInt();
        MainVeiw.input.nextLine();
        if (id <= 0){
            System.out.println("id必须是大于零的整数");
            return null;
        }
        if(cache==null){
            Result result = Roleservice.list();
            cache=(RoleVo[]) result.data;
        }
        RoleVo role =null;
        for (RoleVo item : cache) {
            if (item.id == id) {
                System.out.println("该ID对应的数据是：");
                System.out.printf("id%d\t名称%s\t数据访问范围%s\n", item.id, item.name, item.dataScope);
                role=item;
                break;
            }
        }
        if (role==null){
            System.out.println("没有找到对应的数据");
            return null;
        }
        return role;
    }

}
